﻿'********************************************************************************
'*
'*      マーク着工/完了履歴　フォーム
'*
'*      File Name : frmStartCompleteMark.vb
'*      機能    　：マーク着工/完了履歴
'*
'*      Title     : マーク着工/完了履歴画面
'********************************************************************************
'----------------------------------<<修正履歴>>----------------------------------
'ﾊﾞｰｼﾞｮﾝ   日付       作業者        ｺﾒﾝﾄ
'--------- ---------- ------------ ----------------------------------------------
' V1.0.0   2016/07/12 S.Yu         新規作成
' V2.0.0   2017/06/21 T.Yutaro     蘇州対応
' V3.0.0   2017/12/25 Y.Shimabukuro 北京対応
' V4.0.0   2017/12/19 miao　　　　 北京対応（廃棄フレーム枚数の必須チェックを削除）
'********************************************************************************

Imports System.Text

Public Class frmStartCompleteMark
    '前工程の計上データ（完了MSラックNo）
    Private Const COMP_RACK As String = "COMP MS RACK NO"

    '>>2018/1/31 佐川 キャリア交換対応
    '実行モード
    '0:表示 1:着工 2:製造完成 3:計上完成
    Private execMode As String = VIEW
    '<<2018/1/31 佐川 キャリア交換対応

    'Add Miaojf 2019/11/22 Begin
    Overrides Sub selectTab()

        tabBase.SelectedIndex = 2

        Me.UpdateStyles()
    End Sub
    'Public Overrides Sub SetFocus()

    '    btnBarCode1.Enabled = True
    '    btnBarCode1.PerformClick()
    '    'txt0102.Enabled = True
    '    'txt0102.Focus()
    'End Sub
    'Add Miaojf 2019/11/22 END

    'タブコントロールの設定
    Public Overrides Sub setTabControl()
        TabPageEqp.Enabled = False
    End Sub

    '照合結果設定
    Public Overrides Sub SetPassScore()
        PASS_SCORE = 3
        ReDim m_iScore(PASS_SCORE - 1)
        m_iScore = {PASS_SCORE_WAIT_CHECK, PASS_SCORE_CHECKED, PASS_SCORE_CHECKED}
    End Sub

    '照合結果クリア
    Public Overrides Sub InitualizeCollData()
        m_iScore = {PASS_SCORE_WAIT_CHECK, PASS_SCORE_CHECKED, PASS_SCORE_CHECKED}
    End Sub

    'イベント設定
    Public Overrides Sub SetHandler()
        '受入MSラック
        AddHandler txt0102.KeyPress, AddressOf beforeRackNoKeyPress
        AddHandler txt0103.KeyPress, AddressOf beforeRackNoKeyPress
        AddHandler txt0102.LostFocus, AddressOf txtRackNo_LostFocus
        AddHandler txt0103.LostFocus, AddressOf txtRackNo_LostFocus
        AddHandler btnBarCode1.Click, AddressOf btnMsRackNo_Click '2018/2/22 佐川 ラックNo入力動作を統一

        '完了MSラック
        AddHandler txt0202.KeyPress, AddressOf afterRackNoKeyPress
        AddHandler txt0203.KeyPress, AddressOf afterRackNoKeyPress
        AddHandler txt0202.LostFocus, AddressOf txtRackNo_LostFocus
        AddHandler txt0203.LostFocus, AddressOf txtRackNo_LostFocus
        AddHandler btnBarCode2.Click, AddressOf btnMsRackNo_Click '2018/2/22 佐川 ラックNo入力動作を統一

        '廃棄フレーム数
        AddHandler lblFrameCount.Click, AddressOf TenKeyClick

        ' >> 20180710 佐川 ラックNo途入力改善
        AddHandler txt0102.Click, AddressOf rackInputFocus
        AddHandler lbl0102.Click, AddressOf rackInputFocus
        AddHandler txt0103.Click, AddressOf rackInputFocus
        AddHandler lbl0103.Click, AddressOf rackInputFocus
        AddHandler lbl0202.Click, AddressOf afterRackInputFocus
        AddHandler txt0202.Click, AddressOf afterRackInputFocus
        AddHandler lbl0203.Click, AddressOf afterRackInputFocus
        AddHandler txt0203.Click, AddressOf afterRackInputFocus
        ' << 20180710 佐川 ラックNo途入力改善

    End Sub

    'Lot Noでデータベースからデータを取得する
    Public Overrides Sub GetDataByIcTag()

        '初期化
        InputDataClear()

        'ICタグのデータで画面を設定する
        SetFromTag()

        If m_MoveInCheck = False Then Exit Sub
        'ロット部のセット
        setGridViewLot()

        If String.IsNullOrEmpty(IcTag.szUID) Then
            IcTag = LastTag
        End If

        '製造条件取得
        setJyokenData()

        '現物型式
        setDetailData()

        If IcTag.Status = TagProcessStatus.Ready Then
            'DEL 苗 2018/1/24 BEGIN
            ''前工程のデータ取得(廃棄フレーム数設定)
            'getPreInfoTabData()
            'DEL 苗 2018/1/24 END
        Else
            For Each dr In dtDetailData.Rows
                If dr("MNF_CND_TAG").Equals(lbl0100.Tag) Then
                    '受入MSラックNo
                    If dr("SEQ") = 1 Then
                        txt0102.Text = DBNullTOblank(dr("ACTUAL_MODEL")) 'UPD MIAO 2018/11/1
                    ElseIf dr("SEQ") = 2 Then
                        txt0103.Text = DBNullTOblank(dr("ACTUAL_MODEL")) 'UPD MIAO 2018/11/1
                    End If
                ElseIf dr("MNF_CND_TAG").Equals(lbl0200.Tag) Then
                    '完了MSラックNo
                    If dr("SEQ") = 1 Then
                        txt0202.Text = DBNullTOblank(dr("ACTUAL_MODEL")) 'UPD MIAO 2018/11/1
                    ElseIf dr("SEQ") = 2 Then
                        txt0203.Text = DBNullTOblank(dr("ACTUAL_MODEL")) 'UPD MIAO 2018/11/1
                    End If
                    'DEL 苗 2018/1/24 BEGIN
                    'ElseIf dr("MNF_CND_TAG").Equals(lblFrameCountText.Tag) Then
                    '    '廃棄フレーム数
                    '    lblFrameCount.Text = dr("ACTUAL_MODEL")
                    'DEL 苗 2018/1/24 END
                End If
            Next
        End If

        getHeadData()

        With m_dtMat
            If .Rows.Count > 0 Then
                '着完日時
                DisplayDate()
            Else
                If m_dtMat.Columns.Count > 0 Then
                    .Rows.Add()
                Else
                    .Columns.Add("BEGIN_TIME")
                    .Rows.Add()
                End If
            End If
        End With
        'ADD 苗 2018/1/5 BEGIN
        lblLostframe = lblFrameCount
        strLostFrame = lblFrameCountText.Text

        'ADD 苗 2018/1/24 BEGIN
        'L_TAG_LOTDATAからIC廃棄のフレーム枚数を画面に設定
        lblFrameCount.Text = IcTag.iDisposalFrmNum
        'ADD 苗 2018/1/24 END
    End Sub

    '画面データ保存（着工時）
    Public Overrides Function SaveEquipMat(ByRef szBeginTime As DateTime) As Boolean

        '>>2018/1/31 佐川 キャリア交換対応
        execMode = BEGIN
        '<<2018/1/31 佐川 キャリア交換対応

        If saveDetail(BEGIN) < 0 Then
            Return False
        Else
            Return True
        End If
    End Function

    '画面データ保存（製造完成）
    Public Overrides Function SaveCompleteInfo(Optional ByVal status As ProcessStatus = ProcessStatus.ManufComplete) As Integer

        '>>2018/1/31 佐川 キャリア交換対応
        execMode = COMPLETE
        '<<2018/1/31 佐川 キャリア交換対応

        dtDBUpd.Clear()
        Return saveDetail(COMPLETE)
    End Function

    '画面データ保存(計上完成)
    Public Overrides Function SaveTotalInfo() As Integer

        '>>2018/1/31 佐川 キャリア交換対応
        execMode = TOTAL
        '<<2018/1/30 佐川 キャリア交換対応

        dtDBUpd.Clear()
        Return saveDetail(TOTAL)
    End Function

    '工程明細テーブル処理
    Private Function saveDetail(ByVal type As String) As Integer
        setLotData()
        Dim rowsCnt As Integer = dtDBUpd.Rows.Count
        Dim addIndex As Integer = 0

        '情報タブのデータセット
        '受入MSラックNo1
        dtDBUpd.Rows.Add()
        dtDBUpd.Rows(rowsCnt + addIndex)("MNF_CND_TAG") = lbl0100.Tag
        dtDBUpd.Rows(rowsCnt + addIndex)("MNF_CND_TAG_FLG") = CND_TAG_FLG_ELSE
        dtDBUpd.Rows(rowsCnt + addIndex)("SEQ") = 1
        dtDBUpd.Rows(rowsCnt + addIndex)("ACTUAL_MODEL") = txt0102.Text
        addIndex += 1

        '受入MSラックNo2 
        dtDBUpd.Rows.Add()
        dtDBUpd.Rows(rowsCnt + addIndex)("MNF_CND_TAG") = lbl0100.Tag
        dtDBUpd.Rows(rowsCnt + addIndex)("MNF_CND_TAG_FLG") = CND_TAG_FLG_ELSE
        dtDBUpd.Rows(rowsCnt + addIndex)("SEQ") = 2
        dtDBUpd.Rows(rowsCnt + addIndex)("ACTUAL_MODEL") = txt0103.Text
        addIndex += 1

        If type <> BEGIN Then
            '完了MSラックNo1
            dtDBUpd.Rows.Add()
            dtDBUpd.Rows(rowsCnt + addIndex)("MNF_CND_TAG") = lbl0200.Tag
            dtDBUpd.Rows(rowsCnt + addIndex)("MNF_CND_TAG_FLG") = CND_TAG_FLG_ELSE
            dtDBUpd.Rows(rowsCnt + addIndex)("SEQ") = 1
            dtDBUpd.Rows(rowsCnt + addIndex)("ACTUAL_MODEL") = txt0202.Text
            addIndex += 1

            '完了MSラックNo2 
            dtDBUpd.Rows.Add()
            dtDBUpd.Rows(rowsCnt + addIndex)("MNF_CND_TAG") = lbl0200.Tag
            dtDBUpd.Rows(rowsCnt + addIndex)("MNF_CND_TAG_FLG") = CND_TAG_FLG_ELSE
            dtDBUpd.Rows(rowsCnt + addIndex)("SEQ") = 2
            dtDBUpd.Rows(rowsCnt + addIndex)("ACTUAL_MODEL") = txt0203.Text
            addIndex += 1
            '1/30 苗 履歴に保存するようにコメントを解除する
            '廃棄フレーム数
            dtDBUpd.Rows.Add()
            dtDBUpd.Rows(rowsCnt + addIndex)("MNF_CND_TAG") = lblFrameCountText.Tag
            dtDBUpd.Rows(rowsCnt + addIndex)("MNF_CND_TAG_FLG") = CND_TAG_FLG_ELSE
            dtDBUpd.Rows(rowsCnt + addIndex)("SEQ") = 1
            dtDBUpd.Rows(rowsCnt + addIndex)("ACTUAL_MODEL") = lblFrameCount.Text
            addIndex += 1
        End If

        Return m_cEquipMat.SaveDetail(lotNo, IcTag.szProcsCD, type,
                                      m_szTable, dtDBUpd, m_dtHeader,
                                      m_cIdohyo.EquipInfo.szEquipNo, serverTime)

    End Function

    '計上完成時チェック処理
    Public Overrides Function EndCheck() As Boolean
        Dim checkFlg As Boolean

        '完了MSラックNo1の空白チェック
        checkFlg = checkBlank(txt0202.Text, lbl0200.Text)
        If Not checkFlg Then
            checkColor(txt0202, checkFlg, lbl0202.Name)
            Return checkFlg
        End If

        '完了MSラックNo1,2の重複チェック
        If txt0202.Text.Equals(txt0203.Text) Then
            checkFlg = False
            MsgBox(getMsgStr("MSG00064", lbl0200.Text))
            checkColor(txt0202, checkFlg, lbl0202.Name)
            Return checkFlg
        End If
        'DEL 苗 2018/1/5 BEGIN
        '廃棄フレーム数の空白チェック
        'checkFlg = checkBlank(lblFrameCount.Text, lblFrameCountText.Text)
        'If Not checkFlg Then
        '    checkColor(lblFrameCount, checkFlg, lblFrameCount.Name)
        '    Return checkFlg
        'End If
        'DEL 苗 2018/1/5 END
        IcTag.iDisposalFrmNum = lblFrameCount.Text 'ADD 苗 2018/1/24
        Return True
    End Function

    '初期化、背景色の設定
    Public Sub InputDataClear()

        '>>2018/1/30 佐川 キャリア交換対応
        execMode = VIEW
        '<<2018/1/30 佐川 キャリア交換対応

        'ロットタブの初期化
        clearActualModel()

        '受入MSラックNo
        txt0102.Text = String.Empty
        txt0103.Text = String.Empty
        lbl0102.BackColor = BARCODE_INIT_COLOR
        txt0102.BackColor = BARCODE_INIT_COLOR
        lbl0103.BackColor = BARCODE_INIT_COLOR
        txt0103.BackColor = BARCODE_INIT_COLOR
        '完了MSラックNo
        txt0202.Text = String.Empty
        txt0203.Text = String.Empty
        lbl0202.BackColor = NORMAL_INIT_COLOR
        txt0202.BackColor = NORMAL_INIT_COLOR
        lbl0203.BackColor = NORMAL_INIT_COLOR
        txt0203.BackColor = NORMAL_INIT_COLOR

        '廃棄フレーム数
        lblFrameCount.Text = String.Empty
        lblFrameCount.BackColor = NORMAL_INIT_COLOR

        '開始作業者No
        txtOptNoStt.Text = String.Empty
        '終了作業者No
        txtOptNoEnd.Text = String.Empty

    End Sub
    'DEL 苗 2018/1/24 BEGIN
    '' 情報タブの前工程データ取得
    'Protected Sub getPreInfoTabData()

    '    Dim Pre_Proc_Table As String = ""
    '    Dim Pre_Proc_Code As String = ""
    '    ' 前工程取得
    '    Dim dtPreProc = m_cData.GetPreProcCode(lblLotNo.Text, lblProcessCD.Text)
    '    If dtPreProc.Rows.Count > 0 Then
    '        ' 前工程の結果テーブル名設定
    '        Pre_Proc_Table = dtPreProc.Rows(0)("PROCTABLE")
    '        ' 前工程の工程コード設定
    '        Pre_Proc_Code = dtPreProc.Rows(0)("PREPROC")

    '        dtDetailData = New DataTable

    '        ' 着工前の場合は、前工程のデータを取得する。
    '        If IcTag.Status = TagProcessStatus.Ready Then
    '            ' 前工程の計上データ取得
    '            dtDetailData = m_cEquipMat.GetDetailResult(lblLotNo.Text, Pre_Proc_Code, TOTAL, Pre_Proc_Table)
    '            For Each dr In dtDetailData.Rows
    '                '取得データが存在した場合は値を設定する。
    '                If dr(DB_WORK_RESULT_PHYSICALNAME_MNF_CND_TAG).Equals(lblFrameCountText.Tag) Then
    '                    '廃棄フレーム枚数に値を設定
    '                    lblFrameCount.Text = dr(DB_WORK_RESULT_PHYSICALNAME_ACTUAL_MODEL)
    '                End If
    '            Next
    '        End If
    '    End If
    'End Sub
    'DEL 苗 2018/1/24 END
    '受入MSラックNo入力処理
    Private Sub beforeRackNoKeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs)
        '頭に付いている'%'を消す
        Static Dim fIsPercentInput As Boolean = False
        If e.KeyChar = CChar("%") OrElse e.KeyChar = CChar("％") Then
            fIsPercentInput = True
            e.Handled = True
            Exit Sub
        End If
        If fIsPercentInput Then
            fIsPercentInput = False
            e.Handled = True
            Exit Sub
        End If

        '改行コードが入力された場合は、受入MSラックNoのチェックを行う
        If e.KeyChar = vbCr Then
            Dim txtData As TextBox = CType(sender, TextBox)
            txtData.Text = txtData.Text.ToUpper 'Add 苗 2018/4/10

            If AutoManualMode = 0 And AUTO_MANUAL_BTN = TYPE_AUTO Then
                'Add 苗 2019/11/24 Begin
                Dim tmpLotNo As String
                tmpLotNo = getLotNoByRack(txtData.Text)

                If tmpLotNo <> "" Then
                    If getBsitePrcdCD(tmpLotNo) <> "A54" Then
                        tmpLotNo = ""
                    End If
                End If

                If tmpLotNo = "" Then
                    m_cLotDefect.insertLotRackInfo(txtData.Text)
                    tmpLotNo = getLotNoByRack(txtData.Text)
                End If

                If txtLotNo.Text = "" Or (tmpLotNo <> "" And txtLotNo.Text <> tmpLotNo) Then
                    txtLotNo.Text = tmpLotNo
                    If txtLotNo.Text.Trim() <> "" Then
                        txtLotNo_KeyPress(txtLotNo, New KeyPressEventArgs(vbCr))
                        setBeforeRackNo()
                        Exit Sub
                    End If
                End If
                'Add 苗 2019/11/24 End
            End If
            If beforeRackNoCheck(sender, e) Then
                txtData.Enabled = False
                '>>2018/2/6 佐川 RSB確認結果一覧No32
                '受入MSラックNo1が前工程と一致している場合かつ
                '着工前の場合は受入MSラックNo2を入力可能にしフォーカスを合わせる
                If txtData.Name = String.Format("txt{0}02", txtData.Tag.ToString) And IcTag.Status = TagProcessStatus.Ready Then
                    '<<2018/2/6 佐川 RSB確認結果一覧No32
                    txt0103.Enabled = True
                    txt0103.Focus()
                    txt0103.BackColor = FOCUS_INIT_COLOR
                    lbl0103.BackColor = FOCUS_INIT_COLOR
                End If
            End If
        End If
    End Sub

    '受入MSラックNoの入力値と前工程の整合性確認
    Private Function beforeRackNoCheck(ByVal sender As System.Object, ByVal e As System.EventArgs)
        Dim txtData As TextBox = CType(sender, TextBox)
        Dim lblSys As Label = txtData.Parent.Controls.Find(String.Format("lbl{0}", txtData.Name.ToString.Substring(3, 4)), False)(0)
        Dim preConsRackNo As String = String.Empty
        Dim procCheckResult As Boolean = False

        If txtData.Name = String.Format("txt{0}02", txtData.Tag.ToString) Then
            ' LostFocusが受入MSラックNo1の場合、空白チェックを行う
            If txtData.Text.Equals("") Then
                MsgBox(getMsgStr("MSG00020", lbl0100.Text))
                checkColor(sender, False, lblSys.Name)
                '>> 2018/2/22 佐川 ラックNo入力動作を統一
                txtData.Enabled = True
                txtData.Focus()
                txtData.SelectAll()
                '<< 2018/2/22 佐川 ラックNo入力動作を統一
                m_iScore(CInt(txtData.Tag) - 1) = PASS_SCORE_WAIT_CHECK
                Return False
            End If
        End If

        '受入MSラックNo1,2の重複チェック
        If txt0102.Text.Equals(txt0103.Text) Then
            MsgBox(getMsgStr("MSG00064", lbl0100.Text))
            checkColor(sender, False, lblSys.Name)
            '>> 2018/2/22 佐川 ラックNo入力動作を統一
            txtData.Enabled = True
            txtData.Focus()
            txtData.SelectAll()
            '<< 2018/2/22 佐川 ラックNo入力動作を統一
            m_iScore(CInt(txtData.Tag) - 1) = PASS_SCORE_WAIT_CHECK
            Return False
        End If

        '>>20180313 大賀 搬送容器桁数チェックを共通化
        If Not txtData.Text.Equals("") Then
            ' ラックNoの桁数チェック
            If Not isCheckCaseLength(txtData, MS_RACK_CASE_NO_LENGTH, lblSys) Then
                m_iScore(CInt(txtData.Tag) - 1) = PASS_SCORE_WAIT_CHECK
                Return False
            End If
        End If
        '<<20180313 大賀 搬送容器桁数チェックを共通化

        '前工程のデータと比較
        '>>2018/1/31 佐川 キャリア交換対応
        If txtData.Text.Equals(IcTag.container1) Or txtData.Text.Equals(IcTag.container2) Then
            procCheckResult = True
        End If
        'For Each dr In dtPreDetailData.Rows
        '    If dr(DB_WORK_RESULT_PHYSICALNAME_MNF_CND_TAG).Equals(COMP_RACK) Then
        '        '受入MSラックNo
        '        preConsRackNo = dr(DB_WORK_RESULT_PHYSICALNAME_ACTUAL_MODEL)
        '        If preConsRackNo.Equals(txtData.Text) Then
        '            procCheckResult = True
        '            Exit For
        '        End If
        '    End If
        'Next
        '<<2018/1/31 佐川 キャリア交換対応

        '前工程データに一致しない場合
        If Not procCheckResult Then
            MsgBox(getMsgStr("MSG00052", lbl0100.Text))
            checkColor(sender, False, lblSys.Name)
            '>> 2018/2/22 佐川 ラックNo入力動作を統一
            txtData.Enabled = True
            txtData.Focus()
            txtData.SelectAll()
            '<< 2018/2/22 佐川 ラックNo入力動作を統一
            m_iScore(CInt(txtData.Tag) - 1) = PASS_SCORE_WAIT_CHECK
            Return False
        End If

        checkColor(sender, True, lblSys.Name)

        If txtData.Name = String.Format("txt{0}03", txtData.Tag.ToString) Then
            'LostFocusが受入MSラックNo2の場合、照合結果を"1"に更新
            m_iScore(CInt(txtData.Tag) - 1) = PASS_SCORE_CHECKED
            '>>2018/2/6 佐川 RSB確認結果一覧No32
        ElseIf IcTag.container2.Equals("") Then
            '<<2018/2/6 佐川 RSB確認結果一覧No32
            m_iScore(CInt(txtData.Tag) - 1) = PASS_SCORE_CHECKED
        End If

        CheckCollScore()
        Return True

    End Function

    '完了MSラックNo入力処理
    Private Sub afterRackNoKeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs)
        '頭に付いている'%'を消す
        Static Dim fIsPercentInput As Boolean = False
        If e.KeyChar = CChar("%") OrElse e.KeyChar = CChar("％") Then
            fIsPercentInput = True
            e.Handled = True
            Exit Sub
        End If
        If fIsPercentInput Then
            fIsPercentInput = False
            e.Handled = True
            Exit Sub
        End If

        '改行コードが入力された場合は、完了MSラックNoのチェックを行う
        If e.KeyChar = vbCr Then
            Dim txtData As TextBox = CType(sender, TextBox)
            txtData.Text = txtData.Text.ToUpper 'Add 苗 2018/4/10
            If afterRackNoCheck(sender, e) Then
                txtData.Enabled = False
            End If
        End If
    End Sub

    '完了MSラックNoチェック
    Function afterRackNoCheck(ByVal sender As System.Object, ByVal e As System.EventArgs)
        Dim txtData As TextBox = CType(sender, TextBox)
        Dim lblSys As Label = txtData.Parent.Controls.Find(String.Format("lbl{0}", txtData.Name.ToString.Substring(3, 4)), False)(0)

        If txtData.Name = String.Format("txt{0}02", txtData.Tag.ToString) Then
            ' LostFocusがラックNo1の場合，空白チェックを行う
            If txtData.Text.Equals("") Then
                MsgBox(getMsgStr("MSG00020", lbl0200.Text))
                checkColor(sender, False, lblSys.Name)
                '>> 2018/2/22 佐川 ラックNo入力動作を統一
                txtData.Enabled = True
                txtData.Focus()
                txtData.SelectAll()
                '<< 2018/2/22 佐川 ラックNo入力動作を統一
                Return False
            End If
        End If

        If Not txtData.Text.Equals("") Then
            '>>2018/2/1 佐川 RSB確認結果一覧No64
            '前工程ラックNoと一致している場合はエラー
            If txtData.Text.Equals(txt0102.Text) Or txtData.Text.Equals(txt0103.Text) Then
                MsgBox(getMsgStr("MSG10018", txtData.Text))
                checkColor(sender, False, lblSys.Name)
                '>> 2018/2/22 佐川 ラックNo入力動作を統一
                txtData.Enabled = True
                txtData.Focus()
                txtData.SelectAll()
                '<< 2018/2/22 佐川 ラックNo入力動作を統一
                Return False
            End If
            '<<2018/2/1 佐川 RSB確認結果一覧No64
            '>>20180313 大賀 搬送容器桁数チェックを共通化
            ' ラックNoの桁数チェック
            If Not isCheckCaseLength(txtData, MS_RACK_CASE_NO_LENGTH, lblSys) Then
                Return False
            End If
            '<<20180313 大賀 搬送容器桁数チェックを共通化
        End If


        '完了MSラックNo1,2の重複チェック
        If txt0202.Text.Equals(txt0203.Text) Then
            MsgBox(getMsgStr("MSG00064", lbl0200.Text))
            checkColor(sender, False, lblSys.Name)
            '>> 2018/2/22 佐川 ラックNo入力動作を統一
            txtData.Enabled = True
            txtData.Focus()
            txtData.SelectAll()
            '<< 2018/2/22 佐川 ラックNo入力動作を統一
            Return False
        Else
            If txtData.Name = String.Format("txt{0}02", txtData.Tag.ToString) Then
                txt0203.Enabled = True
                txt0203.Focus()
                txt0203.BackColor = FOCUS_INIT_COLOR
                lbl0203.BackColor = FOCUS_INIT_COLOR
            End If
            checkColor(sender, True, lblSys.Name)
            Return True
        End If

    End Function

    '画面項目の表示切替
    Public Overrides Sub ConfScreenItem()
        If txtLotNo.TextLength > 0 Then
            If IcTag.Status = TagProcessStatus.Ready Then
                '着工待ち
                btnBarCode1.Enabled = True
                btnBarCode2.Enabled = False
                '受入MSラックNo
                txt0102.BackColor = BARCODE_INIT_COLOR
                lbl0102.BackColor = BARCODE_INIT_COLOR
                txt0103.BackColor = BARCODE_INIT_COLOR
                lbl0103.BackColor = BARCODE_INIT_COLOR
                '完了MSラックNo
                txt0202.BackColor = NORMAL_INIT_COLOR
                lbl0202.BackColor = NORMAL_INIT_COLOR
                txt0203.BackColor = NORMAL_INIT_COLOR
                lbl0203.BackColor = NORMAL_INIT_COLOR
                '廃棄フレーム数
                lblFrameCount.Enabled = False
                lblFrameCount.BackColor = NORMAL_INIT_COLOR
            ElseIf IcTag.Status = TagProcessStatus.Processing Or IcTag.Status = TagProcessStatus.ManufComplete Then
                btnBarCode1.Enabled = False
                btnBarCode2.Enabled = True
                '受入MSラックNo
                txt0102.BackColor = NORMAL_INIT_COLOR
                lbl0102.BackColor = NORMAL_INIT_COLOR
                txt0103.BackColor = NORMAL_INIT_COLOR
                lbl0103.BackColor = NORMAL_INIT_COLOR
                '完了MSラックNo
                txt0202.BackColor = BARCODE_INIT_COLOR
                lbl0202.BackColor = BARCODE_INIT_COLOR
                txt0203.BackColor = BARCODE_INIT_COLOR
                lbl0203.BackColor = BARCODE_INIT_COLOR
                '廃棄フレーム数
                lblFrameCount.Enabled = True
                lblFrameCount.BackColor = TENKEY_INIT_COLOR
            Else
                '不正
                MsgBox(getMsgStr("MSG00025"))
            End If

        End If

    End Sub

    '計上完成正常時の画面初期化
    Protected Overrides Sub initializForm()
        MyBase.initializForm()
        InputDataClear()
    End Sub
    'ADD 苗 2018/1/24 BEGIN
    '製造完成
    Protected Overrides Function ManufCompCheck() As Boolean
        Return EndCheck()
    End Function
    'ADD 苗 2018/1/24 END

    '受入MSラックタブキー対応
    Private Sub beforeRackNo_PreviewKeyDown(ByVal sender As Object, ByVal e As PreviewKeyDownEventArgs) Handles txt0102.PreviewKeyDown, txt0103.PreviewKeyDown
        'タブキーが押下された場合は、改行コードと見なし処理を行う
        If e.KeyCode = Keys.Tab Then
            e.IsInputKey = True
            beforeRackNoKeyPress(sender, New KeyPressEventArgs(vbCr))
        End If
    End Sub

    '完了MSラックタブキー対応
    Private Sub AfterRackNo_PreviewKeyDown(ByVal sender As Object, ByVal e As PreviewKeyDownEventArgs) Handles txt0202.PreviewKeyDown, txt0203.PreviewKeyDown
        'タブキーが押下された場合は、改行コードと見なし処理を行う
        If e.KeyCode = Keys.Tab Then
            e.IsInputKey = True
            afterRackNoKeyPress(sender, New KeyPressEventArgs(vbCr))
        End If
    End Sub

    '>>2018/1/31 佐川 キャリア交換対応
    'IcTag保存内容設定
    Protected Overrides Sub icTagDataSet()
        '製造完成、計上完成時は画面入力値の値を設定する。
        If execMode.Equals(COMPLETE) Or execMode.Equals(TOTAL) Then
            IcTag.container1 = txt0202.Text
            IcTag.container2 = txt0203.Text
            IcTag.container3 = String.Empty
            IcTag.container4 = String.Empty
            IcTag.container5 = String.Empty
        Else
            '初期値をそのまま保存するため、変更しない。
        End If
    End Sub
    '<<2018/1/31 佐川 キャリア交換対応

    '>> 2018/2/22 佐川 ラックNo入力動作を統一
    ' ラックNo用バーコードクリック
    Protected Sub btnMsRackNo_Click(ByVal sender As Object, ByVal e As EventArgs)

        ' 入力フォーカスの設定
        Dim btn As Button = CType(sender, Button)
        Dim txtData As TextBox = btn.Parent.Controls.Find(String.Format("txt{0}02", btn.Tag.ToString), False)(0)
        Dim lblData As Label = txtData.Parent.Controls.Find(String.Format("lbl{0}02", txtData.Tag.ToString), False)(0)
        Dim textData2 As TextBox = btn.Parent.Controls.Find(String.Format("txt{0}03", btn.Tag.ToString), False)(0)
        Dim lblData2 As Label = txtData.Parent.Controls.Find(String.Format("lbl{0}03", txtData.Tag.ToString), False)(0)

        txtData.Text = String.Empty
        textData2.Text = String.Empty
        txtData.Enabled = True
        txtData.Focus()

        txtData.SelectAll()
        txtData.BackColor = FOCUS_INIT_COLOR
        lblData.BackColor = FOCUS_INIT_COLOR
        textData2.BackColor = FOCUS_INIT_COLOR
        lblData2.BackColor = FOCUS_INIT_COLOR

    End Sub
    '<< 2018/2/22 佐川 ラックNo入力動作を統一

    ' >> 20180301 大賀 作業者入力確定時に次の入力にフォーカスを移動する
    ''' <summary>
    ''' 作業者入力後のフォーカスを各画面で設定する
    ''' 各画面でオーバーライドされない場合はTabIndex順に移動する
    ''' </summary>
    ''' <param name="inputType">作業者入力タイプ</param>
    ''' <param name="nowControl">対象コントロール</param>
    Protected Overrides Sub setNextFocus(ByVal inputType As OPERATER_INPUT_TYPE, ByVal nowControl As Control)
        If m_ProcessStatus <> ProcessStatus.Ready Then  ' ロット未入力の場合は処理しない
            If IcTag.Status = TagProcessStatus.Ready Then   ' 未着工
                If inputType = OPERATER_INPUT_TYPE.START_OPE Then
                    tabBase.SelectedTab = TabPageSp ' タブの移動
                    ' フォーカス設定
                    If String.IsNullOrEmpty(txt0102.Text) Then  ' 未入力の場合に入力可能にする
                        btnBarCode1.PerformClick()  ' バーコード入力ボタンを押す
                        Exit Sub
                    End If
                End If
            ElseIf IcTag.Status = TagProcessStatus.Processing Then  ' 着工中
                If inputType = OPERATER_INPUT_TYPE.END_OPE Then
                    tabBase.SelectedTab = TabPageSp ' タブの移動
                    If String.IsNullOrEmpty(txt0202.Text) Then  ' 未入力の場合に入力可能にする
                        btnBarCode2.PerformClick()  ' バーコード入力ボタンを押す
                        Exit Sub
                    End If
                End If
            ElseIf IcTag.Status = TagProcessStatus.ManufComplete Then ' 製造完成
            End If
        End If
        ' 各画面個別のフォーカスに移動しない場合は次のTabIndexに移動
        SelectNextControl(nowControl, True, True, True, True)
    End Sub
    ' << 20180301 大賀 作業者入力確定時に次の入力にフォーカスを移動する

    ' >> 20180710 佐川 ラックNo途入力改善
    Public Overrides Sub rackInputFocus(ByVal sender As Object, ByVal e As System.EventArgs)
        '未着工のみ選択可能にする
        If IcTag.Status = TagProcessStatus.Ready Then
            MyBase.rackInputFocus(sender, e)
        End If
    End Sub

    Public Sub afterRackInputFocus(ByVal sender As Object, ByVal e As System.EventArgs)
        '着工中のみ選択可能にする
        If IcTag.Status = TagProcessStatus.Processing Then
            MyBase.rackInputFocus(sender, e)
        End If
    End Sub
    ' << 20180710 佐川 ラックNo途入力改善

    '--自動着完工用実装分--BEGIN　2019/11/29
    Protected Overrides Sub setBeforeRackNo(Optional inputRackNo As String = "")
        If IsNothing(IcTag.szLotNo) = False Then
            If IcTag.container1 <> "" Then
                txt0102.Text = IcTag.container1
                If AutoManualMode = 1 Then
                    beforeRackNoCheck(txt0102, New System.EventArgs())
                End If
            End If
                If IcTag.container2 <> "" Then
                txt0103.Text = IcTag.container2
                If AutoManualMode = 1 Then
                    beforeRackNoCheck(txt0103, New System.EventArgs())
                End If
            End If
                m_iScore(CInt(txt0102.Tag) - 1) = PASS_SCORE_CHECKED
        End If
    End Sub
    Public Overrides Sub updateRackInfo()
        Dim rackNo As New ArrayList
        Dim dbLot As New clsDbLotDefect
        If txt0202.Text <> "" Then
            rackNo.Add(txt0202.Text)
        End If
        If txt0203.Text <> "" Then
            rackNo.Add(txt0203.Text)
        End If

        dbLot.DelInsRackInfo(IcTag.szLotNo, rackNo)
    End Sub
    Protected Overrides Function setAfterRackNo(receiveData As receiveCommandData) As Boolean
        If receiveData.UrackNoList.Count = 0 Then
            Return False
        End If
        '完工MS料盒设置
        If IsNothing(receiveData.UrackNoList(0)) = False Then
            txt0202.Text = receiveData.UrackNoList(0)
        End If
        If IsNothing(receiveData.UrackNoList(1)) = False Then
            txt0203.Text = receiveData.UrackNoList(1)
        End If
        Return True
    End Function
    ''' <summary>
    ''' 设置画面控件是否可用
    ''' </summary>
    ''' <param name="mode">True:自动状态，False：手动状态</param>
    Protected Overrides Sub setAutoScreen(mode As Boolean)

        Dim setColor As Color = NORMAL_INIT_COLOR
        Dim setEnabled As Boolean = Not (mode)

        '完工后，是否清空画面，清空后ictag也被清空（手动时为true,自动时为false)
        initializForm_FLG = setEnabled

        If mode = True Then
            setColor = NORMAL_INIT_COLOR
        Else
            setColor = BUTTON_INIT_COLOR
        End If
        txt0102.Enabled = setEnabled
        txt0103.Enabled = setEnabled
        txt0202.Enabled = setEnabled
        txt0203.Enabled = setEnabled

        lbl0102.BackColor = setColor
        txt0102.BackColor = setColor

        lbl0103.BackColor = setColor
        txt0103.BackColor = setColor

        lbl0202.BackColor = setColor
        txt0202.BackColor = setColor

        lbl0203.BackColor = setColor
        txt0203.BackColor = setColor
        btnBarCode1.Enabled = setEnabled
    End Sub

    '--自動着完工用実装分--END　2019/11/29
End Class